HangiEmirleriToplasin değişkeni ile belirlenen yöndeki emirler toplanırken ters işlem olduğunda pozisyon varsa tümü kapatılır.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;
/*
HangiEmirleriToplasin değişkeni ile belirlenen yöndeki emirler toplanırken
ters işlem olduğunda pozisyon varsa tümü kapatılır.
*/
namespace Matriks.Lean.Algotrader
{
public class KumbaraStratejisi : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol1;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod1;
[Parameter(1)]
public decimal Quantity;
[Parameter(14)]
public int Period;
[Parameter(7)]
public int KPercent;
StocRSI stocRSI;
public override void OnInit()
{
stocRSI = StocRSIIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, Period, KPercent);
SendOrderSequential(false, Side.All);
WorkWithPermanentSignal(true);
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (CrossAbove(stocRSI, 30m, 0))
{
if (HangiEmirleriToplasin.Obj == Side.Buy)
{
SendMarketOrder(Symbol1, Quantity, OrderSide.Buy);
Debug("Alış emri gönderildi. adet: " + Quantity);
}else if (HangiEmirleriToplasin.Obj == Side.Sell && kumbara != 0)
{
SendMarketOrder(Symbol1, kumbara, OrderSide.Buy);
Debug("Alış emri gönderildi. kumbara: " + kumbara);
}
}
if (CrossBelow(stocRSI, 80m, 0))
{
if (HangiEmirleriToplasin.Obj == Side.Sell)
{
SendMarketOrder(Symbol1, Quantity, OrderSide.Sell);
Debug("Satış emri gönderildi. adet: " + Quantity);
}else if (HangiEmirleriToplasin.Obj == Side.Buy && kumbara != 0)
{
SendMarketOrder(Symbol1, kumbara, OrderSide.Sell);
Debug("Satış emri gönderildi. kumbara: " + kumbara);
}
}
}
// Gerekli
[Parameter(Side.Buy)]
public Side HangiEmirleriToplasin;
decimal kumbara = 0;
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
if (order.Side.Obj == HangiEmirleriToplasin.Obj)
{
kumbara += order.OrderQty;
Debug("Emir Gerçekleşti. adet: " + order.OrderQty);
}else{
kumbara = 0;
Debug("Ters emir Gerçekleşti. adet: " + order.OrderQty);
}
}
}
// #Gerekli
}
}